import { ApiProperty, ApiPropertyOptional } from '@midwayjs/swagger'
import { Rule, RuleType } from '@midwayjs/validate'

import { PageDTO } from '@/dto'

/**
 * 新建字典类型传输对象
 */
export class CreateDictTypeDTO implements ICreateDictTypeDTO {
  @ApiProperty({ description: '字典名称' })
  @Rule(RuleType.string().required().error(new Error('字典名称不能为空')))
  dictName: string

  @ApiProperty({ description: '字典类型' })
  @Rule(RuleType.string().required().error(new Error('字典类型不能为空')))
  dictType: string

  @ApiProperty({ description: '状态' })
  @Rule(RuleType.string().required().error(new Error('字典状态不能为空')))
  status: string

  @ApiPropertyOptional({ description: '备注' })
  @Rule(RuleType.string().empty(''))
  remark: string
}

/**
 * 更新字典类型传输对象
 */
export class UpdateDictTypeDTO extends CreateDictTypeDTO {}

/**
 *  查找字典类型分页传输对象
 */
export class FindDictTypePageDTO
  extends PageDTO
  implements IFindDictTypePageDTO
{
  @ApiPropertyOptional({ description: '字典名称' })
  @Rule(RuleType.string().empty(''))
  dictName: string
}

/**
 * 查找字典数据分页传输对象
 */
export class FindDictDataPageDTO
  extends PageDTO
  implements IFindDictDataPageDTO
{
  @ApiProperty({ description: '字典类型' })
  @Rule(RuleType.string().required().error(new Error('字典类型不能为空')))
  dictType: string

  @ApiPropertyOptional({ description: '字典标签' })
  @Rule(RuleType.string().empty(''))
  dictLabel: string

  @ApiPropertyOptional({ description: '状态' })
  @Rule(RuleType.string().empty(''))
  status: string
}

/**
 * 添加字典数据传输对象
 */
export class CreateDictDataDTO implements ICreateDictDataDTO {
  @ApiProperty({ description: '字典类型' })
  @Rule(RuleType.string().required().error(new Error('字典类型不能为空')))
  dictType: string

  @ApiProperty({ description: '数据标签' })
  @Rule(RuleType.string().required().error(new Error('数据标签不能为空')))
  dictLabel: string

  @ApiProperty({ description: '数据键值' })
  @Rule(RuleType.string().required().error(new Error('数据键值不能为空')))
  dictValue: string

  @ApiProperty({ description: '字典排序' })
  @Rule(RuleType.number().required().error(new Error('字典排序不能为空')))
  dictSort: number

  @ApiProperty({ description: '状态' })
  @Rule(RuleType.string().required().error(new Error('字典状态不能为空')))
  status: string

  @ApiPropertyOptional({ description: '备注' })
  @Rule(RuleType.string().empty(''))
  remark: string
}

/**
 * 更新字典数据传输对象
 */
export class UpdateDictDataDTO extends CreateDictDataDTO {}
